package com.bayleaf.common.encoding;

public interface JHConverter {
	/**
	 * <p>주어진 유니코드(UTF-8 형식) 문자열 내에, 주어진 문자 집합 범위 외의 문자가  포함되어 있는지 확인하는 메소드.</p>
	 * 
	 * @param unicodeStr 확인하려는 유니코드 문자열
	 * @param charType 목표 문자 집합
	 * @return 포함 여부
	 */
	public boolean detectCharOutOfRange(String unicodeStr, CharsetType charType);
	
	 
	/**
	 * <p>주어진 유니코드 문자열을 확장 한글을 포함한 유니코드 문자열로 변환하는 메소드.</p>
	 * <p>만약 주어진 문자열에 주어진 문자 집합 범위에 벗어나는 문자가 포함된 경우,<br />
	 *    이를 쪽자 방식(샾 -> ㅅㅑㅍ)으로 풀어서 변환한다.</p>
	 * 
	 * @param unicodeStr 변환하려는 유니코드 문자열
	 * @param charType 목표 문자 집합
	 * @return 확장 한글이 포함된 유니코드 문자열
	 */
	public String normalUnicodeToEuckrUnicode(String unicodeStr, CharsetType charType);
	
	
	/**
	 * <p>주어진 문자열을 일반 유니코드 문자열로 변환하는 메소드.</p>
	 * <p>만약, 주어진 문자열에 확장 한글 방식의 글자가 포함되어 있으면,<br />
	 *    이를 합쳐서 하나의 문자로 변환한 다음에 유니코드로 변환한다.</p>
	 * 
	 * @param unicodeStr 확장 한글이 포함된 유니코드 문자열
	 * @return 변환된 유니코드  문자열
	 */
	public String euckrUnicodeToNormalUnicode(String unicodeStr);
	
	
	/**
	 * <p>한글을 제외한, 주어진 문자 집합 범위를 벗어나는 문자(한자 등)를<br />
	 *    유니코드 형식의 NCR 문자로 변환하는 메소드.</p>
	 * 
	 * @param unicodeStr 변환하려는 유니코드 문자열
	 * @param charType 목표 문자 집합
	 * @return NCR을 포함한 유니코드 문자열
	 */
	public String nonNCRUnicodeToNCRUnicode(String unicodeStr, CharsetType charType);
	
	
	/**
	 * <p>NCR 문자를 포함한 유니코드 문자열에서 NCR 문자를 일반 유니코드로 변경하는 메소드.</p>
	 * 
	 * @param unicodeStr 변환하려는 유니코드 문자열
	 * @return NCR을 포함하지 않는 유니코드 문자열
	 */
	public String ncrUnicodeToNonNCRUnicode(String unicodeStr);
	
	
	/**
	 * <p>주어진 EUC-KR 류의 입력 스트림을 유니코드 문자열로 변환하는 메소드.</p>
	 * 
	 * @param euckrStream 변환하려는 입력 스트림
	 * @param charType 주어진 입력 스트림의 문자 집합을 나타낸다.
	 * @param decodeNCR 주어진 입력 스트림 내 NCR 형식의 문자가 있는 경우 이를 검출해서 일반 유니코드 문자로 변환할지 여부
	 * @return 변환된 유니코드 문자열
	 */
	public String convertEuckrToUTF8(byte[] euckrStream, CharsetType charType, boolean decodeNCR);
	
	public String convertEuckrToUTF8(String unicodeStr, CharsetType charType, boolean decodeNCR);
	
	
	/**
	 * <p>주어진 유니코드 문자열을 EUC-KR 류의 스트림으로 변환하는 메소드.</p>
	 * 
	 * @param unicodeStr 변환하려는 유니코드 문자열
	 * @param charType 결과 스트림의 문자 집합
	 * @param encodeNCR 유니코드 문자열 내 지정된 문자 집합 범위 외의 문자가 이는 경우, 이를 NCR로 변환해서 결과에 반영할지 여부
	 * @return 변환된 EUC-KR 류릐 문자 스트림
	 */
	public byte[] convertUTF8ToEuckr(String unicodeStr, CharsetType charType, EncodeMethod encodeMethod);
	
	public String convertUTF8ToEuckr2(String unicodeStr, CharsetType charType, EncodeMethod encodeMethod);
}
